package org.pay.union.param.resp;

import cn.hutool.core.util.StrUtil;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

/***
 * @author Administrator
 */
@AllArgsConstructor
@NoArgsConstructor
@Data
public class BaseResp implements Serializable {
    /**
     * 版本号
     * <p>
     * 是
     * <p>
     * String(8)
     * <p>
     * 版本号，version默认值是2.0。
     */
    protected String version;


    /**
     * 字符集
     * 是
     * <p>
     * String(8)
     * <p>
     * 可选值 UTF-8 ，默认为 UTF-8。
     */
    protected String charset;


    /**
     * 签名方式
     * <p>
     * 否
     * <p>
     * String(8)
     * <p>
     * <p>
     * 签名类型，取值范围：
     * <p>
     * MD5（默认）；
     * <p>
     * SM3；
     */
    protected String sign_type;


    /**
     * 授权交易机构
     * <p>
     * 否
     * <p>
     * String(12)
     * <p>
     * 授权交易的服务商机构代码，商户授权给服务商交易的情况下返回，签名使用服务商的密钥
     */
    protected String sign_agentno;

    /**
     * 连锁商户号
     * 否
     * <p>
     * String(15)
     * <p>
     * 连锁商户为其下门店发交易的情况返回，签名使用连锁商户的密钥
     */
    protected String groupno;


    /**
     * 返回状态码
     * <p>
     * 是
     * <p>
     * String(16)
     * <p>
     * 0表示成功，非0表示失败此字段是通信标识，非交易标识，交易是否成功需要查看 result_code 、pay_result共同来判断
     */
    protected String status;


    /**
     * 返回信息
     * <p>
     * 否
     * <p>
     * String(128)
     * <p>
     * 返回信息，如非空，为错误原因签名失败参数格式校验错误
     */
    protected String message;


    /**
     * 网关返回码
     * <p>
     * 否
     * <p>
     * String(32)
     * <p>
     * 网关返回码
     * <p>
     * 以下字段在 status 为 0的时候有返回
     */
    protected String code;


    /**
     * 业务结果
     * 是
     * <p>
     * String(16)
     * <p>
     * 0表示成功，非0表示失败(非交易失败，表示交易状态未明确，需参考err_code判断是否继续查询),交易终态请参考trade_state，银联二维码交易终态也可参考err_code
     */
    protected String result_code;


    /**
     * 商户号
     * <p>
     * 是
     * <p>
     * String(15)
     * <p>
     * 商户号，由平台分配
     */
    protected String mch_id;


    /**
     * 设备号
     * <p>
     * 否
     * <p>
     * String(32)
     * <p>
     * 终端设备号
     */
    protected String device_info;

    /**
     * 随机字符串
     * 是
     * <p>
     * String(32)
     * <p>
     * 随机字符串，不长于 32 位
     */
    protected String nonce_str;


    /**
     * 错误代码
     * <p>
     * 否
     * <p>
     * String(32)
     * <p>
     * 具体错误码请看文档最后错误码列表
     * <p>
     * 其中USERPAYING代表用户输密中，需要继续查询；
     * <p>
     * 其中银联二维码的err_code为两位数字，含义较特殊：
     * <p>
     * 00 表示交易 成功
     * <p>
     * 04和06 代表交易需要继续查询
     * <p>
     * 其他应答码都是明确代表交易失败
     */
    protected String err_code;


    /**
     * 错误代码描述
     * 否
     * <p>
     * String (128)
     * <p>
     * 结果信息描述
     */
    protected String err_msg;


    /**
     * 签名
     * 是
     * <p>
     * String(32)
     * <p>
     * MD5签名结果，详见“安全规范”
     */
    protected String sign;

    public boolean isSuccessStatus() {
        return StrUtil.equals(status, "0");
    }

}
